WPF加载HTML、WPF与JavaScript交互 | 您所在的位置:网站首页 › wpf webbrowser 预加载 › WPF加载HTML、WPF与JavaScript交互 |
目录 一、WebBrowser加载远程网页 二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件 三、WebBrowser隐藏网页的JavaScript错误 四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 五、WPF程序与网页JavaScript交互 六、创建服务器,提供数据接口、Script、CSS文件 一、WebBrowser加载远程网页 wbrExam.Source = new Uri("http://cnblogs.com/sntetwt");二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件 Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute); Stream source = Application.GetResourceStream(uri).Stream; wbrExam.NavigateToStream(source);三、WebBrowser隐藏网页的JavaScript错误 this.wbrExam.SuppressScriptErrors(true);/// /// WebBrowser隐藏网页的JavaScript错误 /// public static class WebBrowserExtensions { public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser); if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide }); } } 四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 //屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键 window.onhelp = function(){return false} //屏蔽F1帮助 document.onkeydown = function() { if ((window.event.altKey)&& ((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ← (window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 → event.returnValue = false; return false; } /* 注:这还不是真正地屏蔽Alt+方向键, 因为Alt+方向键弹出警告框时,按住Alt键不放, 用鼠标点掉警告框,这种屏蔽方法就失效了。*/ if ((event.keyCode==8) || //屏蔽退格删除键 (event.keyCode==116) || //屏蔽 F5 刷新键 (event.ctrlKe && event.keyCode==82)) { //Ctrl + R event.keyCode=0; event.returnValue=false; } if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11 if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10 if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页 if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4 window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } }五、WPF程序与网页JavaScript交互 public void Message(string str) { MessageBox.Show(str); } /// /// WebBrowser与JavaScript交互 /// [System.Runtime.InteropServices.ComVisible(true)] public class OprateBasic { private MainWindow instance; public OprateBasic(MainWindow instance) { this.instance = instance; } //提供给JS调用 public void HandleMessage(string p) { instance.Message(p); } } //CS调用JS private void Button_Click(object sender, RoutedEventArgs e) { this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" }); }JS调用CS window.external.HandleMessage("JS调用CS"); //提供给CS调用 function invokeScript(args) { alert(args); } 六、创建服务器,提供数据接口、Script、CSS文件 总结:因为加载HTML文件的时候,HTML没有路径,所以加载不了JS和CSS等外部文件 创建远程站点提供数据接口和外部文件 完整的CS程序如下 using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Reflection; namespace WPFSctipt { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_ContentRendered(object sender, EventArgs e) { //加载远程网页 //wbrExam.Source = new Uri("http://cnblogs.com/sntetwt"); Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute); Stream source = Application.GetResourceStream(uri).Stream; //WebBrowser隐藏网页的JavaScript错误 this.wbrExam.SuppressScriptErrors(true); //WebBrowser与JavaScript交互 this.wbrExam.ObjectForScripting = new OprateBasic(this); //加载本地HTML文件 wbrExam.NavigateToStream(source); } public void Message(string str) { MessageBox.Show(str); } /// /// WebBrowser与JavaScript交互 /// [System.Runtime.InteropServices.ComVisible(true)] public class OprateBasic { private MainWindow instance; public OprateBasic(MainWindow instance) { this.instance = instance; } //提供给JS调用 public void HandleMessage(string p) { instance.Message(p); } } //CS调用JS private void Button_Click(object sender, RoutedEventArgs e) { this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" }); } } /// /// WebBrowser隐藏网页的JavaScript错误 /// public static class WebBrowserExtensions { public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser); if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide }); } } }
ASMX文件代码
HTML代码 body{background:red;} .div{height:400px;} //屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键 window.onhelp = function(){return false} //屏蔽F1帮助 document.onkeydown = function() { if ((window.event.altKey)&& ((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ← (window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 → event.returnValue = false; return false; } /* 注:这还不是真正地屏蔽Alt+方向键, 因为Alt+方向键弹出警告框时,按住Alt键不放, 用鼠标点掉警告框,这种屏蔽方法就失效了。*/ if ((event.keyCode==8) || //屏蔽退格删除键 (event.keyCode==116) || //屏蔽 F5 刷新键 (event.ctrlKe && event.keyCode==82)) { //Ctrl + R event.keyCode=0; event.returnValue=false; } if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11 if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10 if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页 if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4 window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } } $(function () { $("div").text("JavaScript被执行"); window.external.HandleMessage("JS调用CS"); }) function invokeScript(args) { alert(args); }
|
CopyRight 2018-2019 实验室设备网 版权所有 |